home *** CD-ROM | disk | FTP | other *** search
/ Mac-Source 1994 July / Mac-Source_July_1994.iso / C and C++ / Text⁄Files / Voyeur 1.1.1 / Voyeur ƒ / MSG Shell ƒ / msg about.c next >
Text File  |  1994-02-26  |  6KB  |  240 lines

  1. /**********************************************************************\
  2.  
  3. File:        msg about.c
  4.  
  5. Purpose:    This module handles the about boxes and that funky animation
  6.             in the "About MSG" about box.
  7.  
  8.  
  9. Voyeur -- a no-frills file viewer
  10. Copyright ©1993-4, Mark Pilgrim
  11.  
  12. This program is free software; you can redistribute it and/or modify
  13. it under the terms of the GNU General Public License as published by
  14. the Free Software Foundation; either version 2 of the License, or
  15. (at your option) any later version.
  16.  
  17. This program is distributed in the hope that it will be useful,
  18. but WITHOUT ANY WARRANTY; without even the implied warranty of
  19. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  20. GNU General Public License for more details.
  21.  
  22. You should have received a copy of the GNU General Public License
  23. along with this program in a file named "GNU General Public License".
  24. If not, write to the Free Software Foundation, 675 Mass Ave,
  25. Cambridge, MA 02139, USA.
  26.  
  27. \**********************************************************************/
  28.  
  29. #include "msg about.h"
  30. #include "msg graphics.h"
  31. #include "msg prefs.h"
  32.  
  33. extern Point RawMouse : 0x82C;
  34.  
  35. void DoTheMSGThing(void)
  36. {
  37.     /* assumes "About MSG" window (gTheWindow[kAboutMSG]) is the front window */
  38.     
  39.     Rect            sourceRect, destRect;
  40.     Rect            mainRect;
  41.     long            lr,tb;
  42.     int                l,t;
  43.     
  44.     mainRect=gMainScreenBounds;
  45.     mainRect.top-=MBarHeight;
  46.     if (PtInRect(RawMouse, &mainRect))
  47.     {
  48.         mainRect=gMainScreenBounds;
  49.         lr=RawMouse.h-mainRect.left;
  50.         lr*=81;
  51.         lr/=mainRect.right-mainRect.left;
  52.         tb=RawMouse.v-mainRect.top;
  53.         tb*=81;
  54.         tb/=mainRect.bottom-mainRect.top;
  55.         if (tb<0)
  56.             tb=0;
  57.         l=RawMouse.h-lr;
  58.         t=RawMouse.v-tb;
  59.         SetRect(&sourceRect, l, t, l+81, t+81);
  60.         SetRect(&destRect, 81, 81, 162, 162);
  61.         CopyBits(&(WMgrPort->portBits), &(gTheWindow[kAboutMSG]->portBits),
  62.             &sourceRect, &destRect, 0, 0L);
  63.     }
  64. }
  65.  
  66. void ShowInformation(void)
  67. {
  68.     OpenTheWindow(kAbout);
  69. }
  70.  
  71. void ShowSplashScreen(void)
  72. {
  73.     OpenTheWindow(kAboutMSG);
  74. }
  75.  
  76. void DrawTheCarpet(void)
  77. {
  78.     int                row;
  79.     Rect            sourceRect, destRect;
  80.     GrafPtr            curPort;
  81.     
  82.     GetPort(&curPort);
  83.     EraseRect(&(curPort->portRect));
  84.     
  85.     DrawCarpet(9,234,3);
  86.     SetRect(&sourceRect, 0, 216, 27, 243);
  87.     destRect=sourceRect;
  88.     OffsetRect(&destRect, 27, 0);
  89.     CopyBits(&(curPort->portBits), &(curPort->portBits),
  90.         &sourceRect, &destRect, 0, 0L);
  91.     OffsetRect(&destRect, -27, -27);
  92.     CopyBits(&(curPort->portBits), &(curPort->portBits),
  93.         &sourceRect, &destRect, 0, 0L);
  94.     OffsetRect(&destRect, 0, -27);
  95.     CopyBits(&(curPort->portBits), &(curPort->portBits),
  96.         &sourceRect, &destRect, 0, 0L);
  97.     OffsetRect(&destRect, 27, 0);
  98.     CopyBits(&(curPort->portBits), &(curPort->portBits),
  99.         &sourceRect, &destRect, 0, 0L);
  100.     SetRect(&sourceRect, 0, 162, 27, 243);
  101.     destRect=sourceRect;
  102.     OffsetRect(&destRect, 54, 0);
  103.     CopyBits(&(curPort->portBits), &(curPort->portBits),
  104.         &sourceRect, &destRect, 0, 0L);
  105.     SetRect(&sourceRect, 0, 162, 81, 243);
  106.     destRect=sourceRect;
  107.     OffsetRect(&destRect, 81, 0);
  108.     CopyBits(&(curPort->portBits), &(curPort->portBits),
  109.         &sourceRect, &destRect, 0, 0L);
  110.     OffsetRect(&destRect, -81, -81);
  111.     CopyBits(&(curPort->portBits), &(curPort->portBits),
  112.         &sourceRect, &destRect, 0, 0L);
  113.     OffsetRect(&destRect, 0, -81);
  114.     CopyBits(&(curPort->portBits), &(curPort->portBits),
  115.         &sourceRect, &destRect, 0, 0L);
  116.     OffsetRect(&destRect, 81, 0);
  117.     CopyBits(&(curPort->portBits), &(curPort->portBits),
  118.         &sourceRect, &destRect, 0, 0L);
  119.     SetRect(&sourceRect, 0, 0, 81, 243);
  120.     destRect=sourceRect;
  121.     OffsetRect(&destRect, 162, 0);
  122.     CopyBits(&(curPort->portBits), &(curPort->portBits),
  123.         &sourceRect, &destRect, 0, 0L);
  124.     
  125.     TextFont(geneva);
  126.     TextSize(9);
  127.     TextMode(srcXor);
  128.     row=92;
  129.     DrawTheString("\pMerriMac", &row);
  130.     DrawTheString("\pSoftware", &row);
  131.     DrawTheString("\pGroup ’94", &row);
  132.     DrawTheString("\p", &row);
  133.     DrawTheString("\pStill enhancing", &row);
  134.     DrawTheString("\pthe flavor of", &row);
  135.     DrawTheString("\pyour Macintosh.", &row);
  136. }
  137.  
  138. void DrawTheString(Str255 theString, int* theRow)
  139. {
  140.     MoveTo((gWindowWidth[kAboutMSG]-StringWidth(theString))/2, *theRow);
  141.     DrawString(theString);
  142.     *theRow+=11;
  143. }
  144.  
  145. void DrawCarpet(int x, int y, int len)
  146. {
  147.     Rect            box;
  148.     int                iter;
  149.  
  150.     x-=len*2;
  151.     y+=len*2;
  152.     for (iter=0; iter<8; iter++)
  153.     {
  154.         box.left=x-len;
  155.         box.right=x+2*len;
  156.         box.top=y-2*len;
  157.         box.bottom=y+len;
  158.         FillRect(&box, black);
  159.         if (len>1) DrawCarpet(x,y,len/3);
  160.         box.left=x;
  161.         box.right=x+len;
  162.         box.bottom=y;
  163.         box.top=y-len;
  164.         FillRect(&box, white);
  165.         switch (iter)
  166.         {
  167.             case 0:
  168.             case 1: x+=len*3; break;
  169.             case 2:
  170.             case 3: y-=len*3; break;
  171.             case 4:
  172.             case 5: x-=len*3; break;
  173.             case 6:
  174.             case 7: y+=len*3; break;
  175.         }
  176.     }
  177. }
  178.  
  179. void DrawTheAboutBox(Boolean isColor)
  180. {
  181.     int                row;
  182.     Handle            textHandle;
  183.     Str255            theLine;
  184.     unsigned long    pos;
  185.     unsigned long    theSize;
  186.     GrafPtr            curPort;
  187.     
  188.     GetPort(&curPort);
  189.     EraseRect(&(curPort->portRect));
  190.     
  191.     TextFont(geneva);
  192.     TextSize(9);
  193.     TextMode(srcCopy);
  194.     if (isColor)
  195.         ForeColor(blueColor);
  196.     row=16;
  197.     textHandle=GetResource('TEXT', 128);
  198.     if (textHandle==0L)
  199.         return;
  200.     if (*textHandle==0L)
  201.         LoadResource(textHandle);
  202.     if (*textHandle==0L)
  203.         return;
  204.     pos=0L;
  205.     theSize=SizeResource(textHandle);
  206.     do
  207.     {
  208.         GetTheNextLine(textHandle, theSize, &pos, theLine);
  209.         DrawTheAboutString(theLine, &row);
  210.     }
  211.     while (pos<theSize);
  212.     ReleaseResource(textHandle);
  213.     if (isColor)
  214.         ForeColor(redColor);
  215.     DrawTheAboutString(gMyName, &row);
  216.     if (gMyOrg[0]!=0x00)
  217.         DrawTheAboutString(gMyOrg, &row);
  218.     if (isColor)
  219.         ForeColor(blueColor);
  220.     DrawTheAboutString("\powns this copy", &row);
  221.     if (isColor)
  222.         ForeColor(blackColor);
  223. }
  224.  
  225. void GetTheNextLine(Handle textHandle, unsigned long theSize, unsigned long *pos, Str255 theLine)
  226. {
  227.     unsigned char    theChar;
  228.     
  229.     theLine[0]=0x00;
  230.     while ((*pos<theSize) && ((theChar=*((unsigned char*)(((long)(*textHandle))+((*pos)++))))!=0x0d))
  231.         theLine[++theLine[0]]=theChar;
  232. }
  233.  
  234. void DrawTheAboutString(Str255 theString, int *theRow)
  235. {
  236.     MoveTo((gWindowWidth[kAbout]-StringWidth(theString))/2, *theRow);
  237.     DrawString(theString);
  238.     *theRow+=12;
  239. }
  240.